package main

import "log"

//接口中申明2个方法（采用的的java中的集成的思想）
type PlayService interface {
	Ping()
	Pang()
}

//接口的实现类 {对于人一个结构体，只要实现了接口中的全部方法，就是成为该类为接口的儿子类}
type PlayPingPangServiceImpl struct {
}

//实现其中一个方法Ping
func (s *PlayPingPangServiceImpl) Ping() {
	log.Printf("ping ")
}

//实现其中一个方法Pang
func (s *PlayPingPangServiceImpl) Pang() {
	log.Println("pang")
}

/**
与java非常类似
1、声明接口
2、子类需要全部实现其中的抽象方法
*/
func main() {
	st := new(PlayPingPangServiceImpl)
	var it PlayService
	it = st
	log.Printf("%#v", st)
	log.Printf("%#v", it)
	if it != nil {
		it.Pang()
		it.Ping()
	}
}
